package com.tinet.autentia.autentificador.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.tinet.autentia.autentificador.model.Usuario;

/**
 * Javadoc de mi proyecto.
 * 
 * @author alguien.
 */
public class UsuarioDAO implements UsuarioDAOInterface<Usuario> {
    /**
     * Conexion a la BD.
     */
    private EntityManager em;

    /**
     * 
     * Constructor que recibe la conexion.
     * 
     * @param em
     */
    public UsuarioDAO(EntityManager em) {
        super();
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public void agregar(Usuario nuevo) {
        em.persist(nuevo);
    }

    /**
     * {@inheritDoc}
     */
    public void actualizar(Usuario actualizado) {
        em.persist(actualizado);
    }

    /**
     * {@inheritDoc}
     */
    public Usuario buscar(Usuario usuario) {
        Query query =
                em.createQuery("SELECT u FROM Usuario u WHERE username=:username");
        query.setParameter("username", usuario.getRut());
        List<Usuario> results = query.getResultList();
        if (results.size() != 0) {
            return results.get(0);
        }
        return null;

    }

    public List<Usuario> buscarTodos(String nombre) {
        Query query;
        if (nombre.equals("") || nombre.equals("*")) {
            query = (Query) em.createQuery("SELECT u FROM Usuario u");
        } else {
            query =
                    (Query) em
                            .createQuery("SELECT u FROM Usuario u WHERE nombre like nombre");
            query.setParameter("username", "%" + nombre + "%");
        }
        List<Usuario> results = query.getResultList();
        return results;
    }

    public void borrar(Usuario eliminar) {
        em.remove(eliminar);
    }

}
